package com.ys.erp.common.util;
import org.apache.commons.lang3.ObjectUtils;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author lwj
 * @date 2023/7/5
 */
public class ListUtil {

    /**
     * Description:         分割list集合
     *
     * @param list          传入的list集合
     * @param splitSize     每splitSize个对象分割成一组
     * @return              list集合分割后的集合
     */
    public static <T> List<List<T>> splitList(Collection<T> list, int splitSize) {
        //判断集合是否为空
        if (ObjectUtils.isEmpty(list)) {
            return Collections.emptyList();
        }
        //计算分割后的大小
        int maxSize = (list.size() + splitSize - 1) / splitSize;
        //开始分割
        return Stream.iterate(0, n -> n + 1)
                .limit(maxSize)
                .parallel()
                .map(a -> list.parallelStream().skip((long) a * splitSize).limit(splitSize).collect(Collectors.toList()))
                .filter(b -> !b.isEmpty())
                .collect(Collectors.toList());
    }

    /**
     * 计算la对比all的占比
     *
     * @param la                部分集合
     * @param all               全部数据
     * @return                  占比
     * @param <T>               泛型
     */
    public static <T> Integer calcRate(Collection<T> la, Collection<T> all) {
        if (la == null || all == null || all.isEmpty()) {
            return 0;
        }

        // 过滤掉null元素
        long validLaSize = la.stream().filter(Objects::nonNull).count();
        long validAllSize = all.stream().filter(Objects::nonNull).count();

        if (validAllSize == 0) {
            return 0;
        }

        return (int)((double)validLaSize * 100 / validAllSize);
    }

}
